/*
题目描述：只出现一次的唯一的数字
其他数字都出现3次
方法：
不能使用异或的方法，但是我们发现将出现3次的数字的二进制对应位上的数字加起来可以被3整除！
 */
public class E56_2 {
    public static void main(String[] args) {
        int[] array = {5,2,2,2,7,7,7,9,9,9};
        int res = FindNumberAppearingOnce(array);
        if(res != -1){
            System.out.println(res);
        }
    }

    public static int FindNumberAppearingOnce(int[] array){
        if(array == null || array.length <= 0){
            return -1;
        }
        int[] bitSum = new int[32];
        for(int i = 0; i < array.length; i++){
            int bitMask = 1;
            for(int j = 31; j >= 0; j--){
                int bit = array[i] & bitMask;
                if(bit != 0){
                    bitSum[j] += 1;
                }
                bitMask <<= 1;
            }
        }

        int res = 0;
        for(int i = 0; i < 32; i++){
            res = res << 1;
            res += bitSum[i] % 3;
        }
        return res;

    }
}
